import { ref, computed } from "vue";
import { defineStore } from "pinia";
import { useRouter, useRoute } from "vue-router";
/**
 * @description 保存当前激活的路由的store
 */
export const useActiveRouterStore = defineStore(
  "activeRouter",
  () => {
    const router = useRouter();
    const activeRoutes = ref([]);
    function addRoute(route) {
      const item = activeRoutes.value.find((r) => {
        return r.fullPath === route.fullPath;
      });
      if (!item) {
        activeRoutes.value.push(route);
      }
    }
    /**
     * 从 activeRoutes 中移除指定的路由
     * @param {Object} route - 要移除的路由对象
     */
    function removeRoute(routePrams) {
      // 使用 findIndex 方法查找路由在 activeRoutes 中的索引
      const index = activeRoutes.value.findIndex((r) => {
        // 如果路由的 fullPath 与参数 route 的 fullPath 相等，则返回 true
        return r.fullPath === routePrams.fullPath;
      });
      // 如果找到了路由的索引（即 index 大于 -1）
      if (index > -1) {
        // 使用 splice 方法从 activeRoutes 中移除该路由
        activeRoutes.value.splice(index, 1);
        //路由跳转到当前删除项的下一个tab的位置的路由没有的话就跳转到第一个tab
        if (activeRoutes.value.length > 0) {
          const nextRoute = activeRoutes.value[index] || activeRoutes.value[0];
          // 调用路由的 push 方法，跳转到指定的路由
          router.push(nextRoute.fullPath);
        }
      }
    }

    // 返回一个对象，包含 activeRoutes 数组和 addRoute 函数
    return { activeRoutes, addRoute, removeRoute };
  },
  {
    persist: true,
    // {
    //   // 自定义持久化配置
    //   key: 'activeRouter', // 存储的key
    //   storage: localStorage, // 存储方式
    //   paths: ['activeRoutes'], // 指定要持久化的字段
    //   beforeRestore: (context) => {
    //     console.log('Before restore:', context)
    //   },
    //   afterRestore: (context) => {
    //     console.log('After restore:', context)
    //   }
    // }
  },
);
/**
 * 维护
 */
export const useRoutesStore = defineStore("routes", () => {
  const sideBarRoutes = ref([]);
  function setRoutes(newRoutes) {
    sideBarRoutes.value = newRoutes;
  }
  return { sideBarRoutes, setRoutes };
});
